package org.dayatang.datasource4saas.dscreator; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.dbcp2.BasicDataSource; import org.dayatang.configuration.Configuration; import org.dayatang.configuration.impl.SimpleConfiguration; import org.dayatang.datasource4saas.Constants; import org.junit.After; import org.junit.Before; import org.junit.Test; import javax.sql.DataSource; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; public class CommonsDbcpDataSourceCreatorTest { private CommonsDbcpDataSourceCreator instance; private String tenant = "abc"; @Before public void setUp() throws Exception { instance = new CommonsDbcpDataSourceCreator(); Configuration dsConfiguration = createDsConfiguration(); Configuration tenantDbMappings = createDbMappings(); instance.setDsConfiguration(dsConfiguration); instance.setTenantDbMapping(tenantDbMappings); } private Configuration createDsConfiguration() { Configuration result = new SimpleConfiguration(); result.setString(Constants.JDBC_HOST, "localhost"); result.setString(Constants.JDBC_PORT, "3306"); result.setString(Constants.JDBC_DB_NAME, "test_db"); result.setString(Constants.JDBC_INSTANCE, "XE"); result.setString(Constants.JDBC_EXTRA_URL_STRING, "useUnicode=true&characterEncoding=utf-8"); result.setString(Constants.JDBC_USERNAME, "root"); result.setString(Constants.JDBC_PASSWORD, "1234"); result.setInt("initialSize", 100); return result; } private Configuration createDbMappings() { Configuration result = new SimpleConfiguration(); result.setString("abc", "DB_ABC"); result.setString("xyz", "DB_XYZ"); return result; } @After public void tearDown() throws Exception { } @Test public void createDataSourceForTenantByMysqlAndDbname() throws Exception { instance.setDbType(DbType.ORACLE); instance.setMappingStrategy(TenantDbMappingStrategy.INSTANCE); String url = "jdbc:oracle:thin:@localhost:3306:DB_ABC?useUnicode=true&characterEncoding=utf-8"; DataSource result = instance.createDataSourceForTenant(tenant); assertThat(result, instanceOf(BasicDataSource.class)); assertEquals("oracle.jdbc.OracleDriver", BeanUtils.getProperty(result, "driverClassName")); assertEquals(url, BeanUtils.getProperty(result, "url")); assertEquals("root", BeanUtils.getProperty(result, "username")); assertEquals("1234", BeanUtils.getProperty(result, "password")); assertEquals("100", BeanUtils.getProperty(result, "initialSize")); } @Test public void createDataSourceForTenantByPostgresAndPort() throws Exception { instance.setDbType(DbType.DB2); instance.setMappingStrategy(TenantDbMappingStrategy.HOST); String url = "jdbc:db2://DB_ABC:3306/test_db?useUnicode=true&characterEncoding=utf-8"; DataSource result = instance.createDataSourceForTenant(tenant); assertThat(result, instanceOf(BasicDataSource.class)); assertEquals("com.ibm.db2.jcc.DB2Driver", BeanUtils.getProperty(result, "driverClassName")); assertEquals(url, BeanUtils.getProperty(result, "url")); assertEquals("root", BeanUtils.getProperty(result, "username")); assertEquals("1234", BeanUtils.getProperty(result, "password")); assertEquals("100", BeanUtils.getProperty(result, "initialSize")); } }